﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OWLServer.owl.tipos;

namespace OWLServer.persistencia.interfaces
{
    /// <summary>
    /// Interfaz que define el gestor de ontologías de la base de datos.
    /// </summary>
    interface IfzOntologiaADO
    {
        /// <summary>
        /// Elimina todas la ontologias de la base de datos
        /// </summary>
        void limpiar();
        /// <summary>
        /// Agrega una ontologia a la base de datos
        /// </summary>
        /// <param name="ontologia">Ontología a agregar</param>
        void agregar(Ontologia ontologia);
        /// <summary>
        /// Actualiza una ontología en la base de datos
        /// </summary>
        /// <param name="ontologia">Ontología a actualizar</param>
        void actualizar(Ontologia ontologia);
        /// <summary>
        /// Elimina un ontología de la base de datos
        /// </summary>
        /// <param name="ontologia">Ontología a eliminar</param>
        void eliminar(Ontologia ontologia);
        /// <summary>
        /// Obtiene una ontología a raiz de su id
        /// </summary>
        /// <param name="idOntologia">Id de la ontología a buscar</param>
        /// <param name="completa">Indica si se cargan los datos, de la base de datos, completos de la ontología</param>
        /// <returns>Ontología encontradas</returns>
        Ontologia getOntologiaPorId(int idOntologia, bool completa);
        /// <summary>
        /// Obtiene una ontología a partir de su Id (about) del OWL
        /// </summary>
        /// <param name="idNombreOntologia">Identificador de la ontología</param>
        /// <param name="completa">Indica si se cargan los datos, de la base de datos, completos de la ontología</param>
        /// <returns>Ontología encontrada</returns>
        IList<Ontologia> getOntologiaPorIdNombre(string idNombreOntologia, bool completa);
        /// <summary>
        /// Obtiene una ontología a partir de la URI del espacio de nombres principal
        /// </summary>
        /// <param name="espacioPrincipal">Espacio de nombre principal de la ontología a buscar</param>
        /// <param name="completa">Indica si se cargan los datos, de la base de datos, completos de la ontología</param>
        /// <returns>Ontología encontrada</returns>
        Ontologia getOntologiaPorEspacioNombrePrincipal(EspacioNombres espacioPrincipal, bool completa);
        /// <summary>
        /// Lista de ontologías que hay en la base de datos
        /// </summary>
        /// <param name="completa">Indica si se cargan los datos, de la base de datos, completos de las ontologías</param>
        /// <returns>Lista de ontologías recuperada</returns>
        IList<Ontologia> getListOntologias(bool completa);
        /// <summary>
        /// Obtiene una ontología a partir de si Identificador
        /// </summary>
        /// <param name="espacioNombrePrincipal">Identificador de espacio Nombre Principal de la ontología</param>
        /// <param name="completa">Indica si se recuperán todos los datos de la ontología de la base de datos.</param>
        /// <returns>Ontología recuperada</returns>
        Ontologia getOntologiaEspacioNombrePrincipal(string espacioNombrePrincipal, bool completa);
    }
}
